/*
 * code.c
 *
 *  Created on: Mar 26, 2022
 *      Author: Abyss
 *      master
 */

#include "main.h"
#include "config.h"

uint8_t tmp_buf[1024];
uint8_t *p_buf = tmp_buf;

extern int flag;

void run()
{

	//test
	// 初始化0.96 OLED123grgrfg12321341231
	OLED_Init();
	printf("0.96 OLED已初始化\r\n");
	// 开启定时器7
	HAL_TIM_Base_Start_IT(&htim7);
	printf("系统运行指示灯\r\n");
	// 检查NRF
	while(NRF24L01_Check())
	{
		printf("NRF24L01不存在r\n");
		HAL_Delay(1000);
	}
	// 进入接收模式
	NRF24L01_RX_Mode();
	printf("进入接收模式\r\n");

	while(1)
	{
		uint8_t buf[32];
		if(NRF24L01_RxPacket(buf) == 0)
		{
			  printf("%s",buf);
			 // printf("\n\n\n");
			  for(int a=0;a<32;a++)
			  {
				  if(buf[a] == '\n')
				  {
					  if(buf[a-1] == '\r')
					  {
						  for(int b=0;b<1024;b++)
						  {
							  tmp_buf[b]='\0';
						  }
						  p_buf = tmp_buf;
						  break;
					  }

				  }

				  //防止指针溢出  导致卡死
				  static int max=0;
				  if(max++ == 1024)
				  {
					  max = 0;
					  for(int b=0;b<1024;b++)
					  {
						  tmp_buf[b]='\0';
					  }
					  p_buf = tmp_buf;
				  }
				  else
				  {
					  // 存入数据
						*p_buf++ = buf[a];
				  }

			}
		}

		if(flag==1)
		{
			flag=0;
			NRF24L01_TX_Mode();
			printf("进入发送模式\r\n");
			cJSON *reportted_obj;


			uint8_t *cjson_prt_buf;
			reportted_obj = cJSON_CreateObject();

			static int slave_id = 10001;
			if(slave_id==10004)slave_id = 10001;
			cJSON_AddNumberToObject(reportted_obj, "id", slave_id++);

			cjson_prt_buf = cJSON_Print(reportted_obj);

			//printf("%s\r\n",cjson_prt_buf);

			uint8_t nrf = NRF24L01_TxPacket(cjson_prt_buf);

			if(nrf==TX_OK)
			{
			  printf("%s\r\n",cjson_prt_buf);
			}

			else if(nrf == MAX_TX)
			{
				printf("NRF24L01对方多次无响应\r\n");
			}
			else
			{
				printf("NRF24L0发送失败\r\n");
			}

			cJSON_free(cjson_prt_buf);
			cJSON_Delete(reportted_obj);

			NRF24L01_RX_Mode();
			printf("进入接收模式\r\n");
		}

	}
}






